<?php

namespace App\Model;

//use Illuminate\Database\Eloquent\Model;

use App\User;
use Illuminate\Database\Eloquent\SoftDeletes;

class Admin extends User
{
    use SoftDeletes;
    // 软删除字段
    public $dates = ['deleted_at'];
    // 允许显示的字段
    protected $fillable = ['id','name','admin_id','username','address','phone','password','created_at','updated_at'];
    //隐藏的字段
    protected $hidden = ['remember_token'];

    static public function _validate(){
        return array(
            'name'=>'required|min:2|max:32',
            'username'=>'required|min:2|max:32|unique:admins',
            'phone'=>'max:11',
            'address'=>'max:255',
            'password'=>'required|min:6|max:255|confirmed',
            'password_confirmation'=>'max:255'
        );
    }

    // 管理员 列表  添加管理员
    static public function Admin_create($data){
        $data = self::validate($data);
        if(!$data['status']){
            return $data;
        }
        $data = $data['data'];
        $data['password'] = bcrypt($data['password']);
        $admin = self::create($data);
        if(isset($admin->id)){
            return Json::success($admin);
        }
        return Json::error('添加出错');
    }

    // 管理员列表 删除 管理员
    static public function Admin_delete($id){
        if($id == 1){
            return Json::error('超级管理不能被删除');
        }
        $admin = self::find($id);
        if(!$admin){
            return Json::error('获取管理员失败');
        }
        $admin->admin_id = auth()->user()->id;
        if(!$admin->save()){
            return Json::error('删除条件出问题');
        }
        if(self::where('id',$id)->delete()){
            return Json::success('删除成功');
        }else{
            return Json::error('删除失败');
        }
    }


    // 管理员列表 重置密码
    static public function Admin_Password_reset($data){
        if($data['id'] == 1){
            return Json::error('超级管理员不允许被修改');
        }
        $admin = self::where('id',$data['id'])->first();
        if(!$admin){
            return Json::error('管理员id有误');
        }
        $data = self::validate($data);
        if(!$data['status']){
            return $data;
        }
        $admin->admin_id = auth()->user()->id;
        $admin->password = bcrypt($data['data']['password']);
        if($admin->save()){
            return Json::success('修改成功');
        }else{
            return Json::error('修改失败');
        }

    }



    // 只需要 定义 好 验证 方法 就 能直接使用
    static public function validate($data){
        $validate  =  self::_validate();
        foreach($validate as $key=>$val){
            if(!isset($data[$key]) && isset($validate[$key])){
                unset($validate[$key]);
            }
        }
//        foreach($data as $key=>$val){
//            if(isset($validate[$key])){
//                $validate_tmp[$key] = $validate[$key];
//            }
//        }
        if(!$data || !$validate){
            return Json::error('验证字段或者参数为空');
        }
        $validator = validator($data,$validate);
        if($validator->fails()){
            return Json::error($validator->errors()->toArray());
        }
        return Json::success($data);
    }

    // 获取 当前用户的 所有角色
    public function Role(){
        return AdminRole::where('id',$this->id)->get()->toArray();
    }


   /*
    * @param $type 等于 空的时候 将会 从数据库 读取用户权限信息
    *
    * */
    public function Permission($type = null){
        $data = session('Home\permission');
        if($type == 1){
            return $this->Permissions();
        }
        if(is_array($data)){
            return $data;
        }
        return $this->Permissions();
    }

    /*
     * 用户获取 权限的方法
     * */
    protected function Permissions(){
        $admin = $this->toArray();
        $admin['role'] = $this->Role(); // 获取 用户的 所有角色
        $data = Permission::Adminall($admin); // 获取用户的 所有权限
        session()->put('Home\permission',$data);
        return $data;
    }



    // 返回 密码
    public function getAuthPassword(){
        return $this->password;
    }
    // 返回 id
    public function getAuthIdentifier(){
        return $this->id;
    }

}
